home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / lib / gettext / user-email < prev   
Encoding:
Text File  |  2007-03-05  |  14.2 KB  |  438 lines

  1. #!/bin/sh
  2. # Prints the user's email address, with confirmation from the user.
  3. #
  4. # Copyright (C) 2001-2003, 2005 Free Software Foundation, Inc.
  5. #
  6. # This program is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation; either version 2, or (at your option)
  9. # any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program; if not, write to the Free Software Foundation,
  18. # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19.  
  20. # Prerequisites for using ${exec_prefix}/lib and ${datarootdir}/locale.
  21. prefix="/usr"
  22. exec_prefix="${prefix}"
  23. datarootdir="${prefix}/share"
  24. datadir="${datarootdir}"
  25. # Set variables libdir, localedir.
  26. libdir="${exec_prefix}/lib"
  27. localedir="${datarootdir}/locale"
  28.  
  29. # Support for relocatability.
  30. if test "no" = yes; then
  31.   orig_installdir="$libdir"/gettext # see Makefile.am's install rule
  32.   # Determine curr_installdir without caring for symlinked callers.
  33.   curr_installdir=`echo "$0" | sed -e 's,/[^/]*$,,'`
  34.   curr_installdir=`cd "$curr_installdir" && pwd`
  35.   # Compute the original/current installation prefixes by stripping the
  36.   # trailing directories off the original/current installation directories.
  37.   while true; do
  38.     orig_last=`echo "$orig_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
  39.     curr_last=`echo "$curr_installdir" | sed -n -e 's,^.*/\([^/]*\)$,\1,p'`
  40.     if test -z "$orig_last" || test -z "$curr_last"; then
  41.       break
  42.     fi
  43.     if test "$orig_last" != "$curr_last"; then
  44.       break
  45.     fi
  46.     orig_installdir=`echo "$orig_installdir" | sed -e 's,/[^/]*$,,'`
  47.     curr_installdir=`echo "$curr_installdir" | sed -e 's,/[^/]*$,,'`
  48.   done
  49.   # Now relocate the directory variables that we use.
  50.   libdir=`echo "$libdir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
  51.   localedir=`echo "$localedir/" | sed -e "s%^${orig_installdir}/%${curr_installdir}/%" | sed -e 's,/$,,'`
  52. fi
  53.  
  54. # Internationalization.
  55. . gettext.sh
  56. TEXTDOMAIN=gettext-tools
  57. export TEXTDOMAIN
  58. TEXTDOMAINDIR="$localedir"
  59. export TEXTDOMAINDIR
  60.  
  61. # Redirect fileno 3 to interactive I/O.
  62. exec 3>/dev/tty
  63.  
  64. # Output a prompt.
  65. if test $# != 0; then
  66.   echo "$1" 1>&3
  67. fi
  68.  
  69. # Find the user name on the local machine.
  70. user=`id -u -n 2>/dev/null`
  71. if test -z "$user"; then
  72.   user="$USER"
  73.   if test -z "$user"; then
  74.     user="$LOGNAME"
  75.     if test -z "$user"; then
  76.       user=unknown
  77.     fi
  78.   fi
  79. fi
  80.  
  81. # Find the hostname.
  82. # hostname on some systems (SVR3.2, old Linux) returns a bogus exit status,
  83. # so uname gets run too, so we keep only the first line of output.
  84. #host=`(hostname || uname -n) 2>/dev/null | sed 1q`
  85. host=`"$libdir"/gettext/hostname --short 2>/dev/null | sed 1q`
  86.  
  87. # Find the hostname.
  88. hostfqdn=`"$libdir"/gettext/hostname --fqdn 2>/dev/null | sed 1q`
  89.  
  90. # Find a list of email addresses from various mailer configuration files.
  91. # All mailers use configuration files under $HOME. We handle them in a
  92. # last-modified - first-priority order.
  93. cd $HOME
  94. files=""
  95.  
  96. # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
  97.  
  98. # Mozilla Thunderbird addresses
  99. files="$files .thunderbird/*/prefs.js"
  100.  
  101. # Mozilla addresses
  102. files="$files .mozilla/*/prefs.js"
  103.  
  104. # Netscape 4 addresses
  105. files="$files .netscape/liprefs.js .netscape/preferences.js"
  106.  
  107. # Netscape 3 addresses
  108. files="$files .netscape/preferences"
  109.  
  110. # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
  111. # XEmacs mew addresses
  112. files="$files .emacs .emacs.el"
  113.  
  114. # KDE2 addresses
  115. files="$files .kde2/share/config/emaildefaults"
  116.  
  117. # KDE kmail addresses
  118. files="$files .kde2/share/config/kmailrc"
  119.  
  120. # GNOME evolution 2 addresses
  121. files="$files .gconf/apps/evolution/mail/%gconf.xml"
  122.  
  123. # GNOME evolution 1 addresses
  124. files="$files evolution/config.xmldb"
  125.  
  126. # GNOME balsa addresses
  127. files="$files .gnome/balsa"
  128.  
  129. # StarOffice and OpenOffice addresses
  130. sed_dos2unix='s/\r$//'
  131. sed_soffice51='s,StarOffice 5\.1=\(.*\)$,\1/sofficerc,p'
  132. sed_soffice52='s,StarOffice 5\.2=\(.*\)$,\1/user/sofficerc,p'
  133. sed_ooffice='s,^OpenOffice[^=]*=\(.*\)$,\1/user/config/registry/instance/org/openoffice/UserProfile.xml,p'
  134. files="$files Office51/sofficerc Office52/user/sofficerc "`sed -n -e "$sed_dos2unix" -e "$sed_soffice51" -e "$sed_soffice52" -e "$sed_ooffice" .sversionrc 2>/dev/null | sed -e 's,^file://*,/,'`
  135.  
  136. # mutt addresses
  137. files="$files .muttrc"
  138.  
  139. # pine addresses
  140. files="$files .pinerc"
  141.  
  142. # xfmail addresses
  143. files="$files .xfmail/.xfmailrc"
  144.  
  145. # tkrat addresses
  146. files="$files .ratatosk/ratatoskrc"
  147.  
  148. # ----------------------- END MAILER SPECIFIC CODE -----------------------
  149.  
  150. # Expand wildcards and remove nonexistent files from the list.
  151. nfiles=""
  152. for file in $files; do
  153.   if test -r "$file" && test ! -d "$file"; then
  154.     nfiles="$nfiles $file"
  155.   fi
  156. done
  157. files="$nfiles"
  158.  
  159. addresses=""
  160.  
  161. if test -n "$files"; then
  162.  
  163.   for file in `ls -t $files`; do
  164.  
  165.     case "$file" in
  166.  
  167. # ----------------------- BEGIN MAILER SPECIFIC CODE -----------------------
  168.  
  169.       # Mozilla and Mozilla Thunderbird addresses
  170.       .mozilla/*/prefs.js | .thunderbird/*/prefs.js)
  171.         addresses="$addresses "`grep -h '^user_pref("mail\.identity\..*\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\..*\.useremail", "\(.*\)");$/\1/'`
  172.         ;;
  173.  
  174.       # Netscape 4 addresses
  175.       .netscape/liprefs.js | .netscape/preferences.js)
  176.         addresses="$addresses "`grep -h '^user_pref("mail\.identity\.useremail", ".*");$' $file 2>/dev/null | sed -e 's/^user_pref("mail\.identity\.useremail", "\(.*\)");$/\1/'`
  177.         ;;
  178.  
  179.       # Netscape 3 addresses
  180.       .netscape/preferences)
  181.         addresses="$addresses "`grep -h '^EMAIL_ADDRESS:' $file 2>/dev/null | sed -e 's/^EMAIL_ADDRESS:[     ]*//'`
  182.         ;;
  183.  
  184.       .emacs | .emacs.el)
  185.         # Emacs/XEmacs rmail, Emacs/XEmacs gnus, XEmacs vm addresses
  186.         addresses="$addresses "`grep -h '[ (]user-mail-address "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]user-mail-address "\([^"]*\)".*$/\1/'`
  187.         # XEmacs mew addresses
  188.         domains=`grep -h '[ (]mew-mail-domain "[^"]*"' $file 2>/dev/null | sed -e 's/^.*[ (]mew-mail-domain "\([^"]*\)".*$/\1/'`
  189.         if test -n "$domains"; then
  190.           for domain in $domains; do
  191.             addresses="$addresses ${user}@$domain"
  192.           done
  193.         fi
  194.         ;;
  195.  
  196.       # KDE2 addresses
  197.       .kde2/share/config/emaildefaults)
  198.         addresses="$addresses "`grep -h '^EmailAddress=' $file 2>/dev/null | sed -e 's/^EmailAddress=//'`
  199.         ;;
  200.  
  201.       # KDE kmail addresses
  202.       .kde2/share/config/kmailrc)
  203.         addresses="$addresses "`grep -h '^Email Address=' $file 2>/dev/null | sed -e 's/^Email Address=//'`
  204.         ;;
  205.  
  206.       # GNOME evolution 2 addresses
  207.       .gconf/apps/evolution/mail/%gconf.xml)
  208.         sedexpr0='s,^.*<addr-spec>\(.*\)</addr-spec>.*$,\1,p'
  209.         addresses="$addresses "`sed -n -e "$sedexpr0" < $file`
  210.         ;;
  211.  
  212.       # GNOME evolution 1 addresses
  213.       evolution/config.xmldb)
  214.         sedexpr0='s/^.*<entry name="identity_address_[0-9]*" type="string" value="\([^"]*\)".*$/\1/p'
  215.         sedexpr1='s/\(..\)/\\x\1/g'
  216.         sedexpr2='s,$,\\n,'
  217.         addresses="$addresses "`sed -n -e "$sedexpr0" < $file | while read hexstring; do printf \`echo "$hexstring" | sed -e "$sedexpr1" -e "$sedexpr2"\`; done`
  218.         ;;
  219.  
  220.       # GNOME balsa addresses
  221.       .gnome/balsa)
  222.         addresses="$addresses "`grep -h '^Address=' $file 2>/dev/null | sed -e 's/^Address=//'`
  223.         ;;
  224.  
  225.       # OpenOffice addresses
  226.       */UserProfile.xml)
  227.         addresses="$addresses "`sed -n -e 's,^.*<mail cfg:type="string">\(.*\)</mail>.*$,\1,p' $file 2>/dev/null`
  228.         ;;
  229.  
  230.       # StarOffice addresses
  231.       # Not a typo. They really write "Adress" with a single d.
  232.       # German orthography...
  233.       */sofficerc)
  234.         addresses="$addresses "`grep -h '^User-Adress=' $file 2>/dev/null | sed -e 's/#[^#]*$//' -e 's/^.*#//'`
  235.         ;;
  236.  
  237.       # mutt addresses
  238.       .muttrc)
  239.         mutt_addresses=`grep -h '^set from="[^"]*"[     ]*$' $file 2>/dev/null | sed -e 's/^set from="\([^"]*\)"[     ]*$/\1/'`
  240.         if test -n "$mutt_addresses"; then
  241.           addresses="$addresses $mutt_addresses"
  242.         else
  243.           # mutt uses $EMAIL as fallback.
  244.           if test -n "$EMAIL"; then
  245.             addresses="$addresses $EMAIL"
  246.           fi
  247.         fi
  248.         ;;
  249.  
  250.       # pine addresses
  251.       .pinerc)
  252.         domains=`grep -h '^user-domain=' $file 2>/dev/null | sed -e 's/^user-domain=//'`
  253.         if test -n "$domains"; then
  254.           for domain in $domains; do
  255.             addresses="$addresses ${user}@$domain"
  256.           done
  257.         else
  258.           # The use-only-domain-name option is only used if the user-domain option is not present.
  259.           domains=`grep -h '^use-only-domain-name=' $file 2>/dev/null | sed -e 's/^use-only-domain-name=//'`
  260.           if test "Yes" = "$domains"; then
  261.             addresses="$addresses ${user}@"`echo "$hostfqdn" | sed -e 's/^[^.]*\.//'`
  262.           fi
  263.         fi
  264.         ;;
  265.  
  266.       # xfmail addresses
  267.       .xfmail/.xfmailrc)
  268.         addresses="$addresses "`grep -h '^from=.*<.*>' $file 2>/dev/null | sed -e 's/^.*<\([^<>]*\)>.*$/\1/'`
  269.         ;;
  270.  
  271.       # tkrat addresses
  272.       .ratatosk/ratatoskrc)
  273.         domains=`grep -h '^set option(masquerade_as) ' $file 2>/dev/null | sed -e 's/^set option(masquerade_as) //'`
  274.         if test -n "$domains"; then
  275.           for domain in $domains; do
  276.             addresses="$addresses ${user}@$domain"
  277.           done
  278.         else
  279.           # The domain option is used only if the masquerade_as option is not present.
  280.           domains=`grep -h '^set option(domain) ' $file 2>/dev/null | sed -e 's/^set option(domain) //'`
  281.           if test -n "$domains"; then
  282.             for domain in $domains; do
  283.               addresses="$addresses ${user}@${host}.$domain"
  284.             done
  285.           fi
  286.         fi
  287.         ;;
  288.  
  289. # ----------------------- END MAILER SPECIFIC CODE -----------------------
  290.  
  291.     esac
  292.  
  293.   done
  294.  
  295. fi
  296.  
  297. # Some Debian systems have a file /etc/mailname.
  298. if test -r /etc/mailname; then
  299.   hostmailname=`cat /etc/mailname`
  300.   if test -n "$hostmailname"; then
  301.     addresses="$addresses ${user}@$hostmailname"
  302.   fi
  303. fi
  304.  
  305. # SuSE Linux >= 8.0 systems have a file /etc/sysconfig/mail.
  306. if test -r /etc/sysconfig/mail; then
  307.   hostmailname=`. /etc/sysconfig/mail && echo "$FROM_HEADER"`
  308.   if test -n "$hostmailname"; then
  309.     addresses="$addresses ${user}@$hostmailname"
  310.   fi
  311. fi
  312.  
  313. # elm has no user-defined addresses.
  314. # mailx has no user-defined addresses.
  315. # mh has no user-defined addresses.
  316. # They use the system default.
  317. addresses="$addresses ${user}@$hostfqdn"
  318.  
  319. # Normalize addresses: remove addresses without @, lowercase the part after @,
  320. # and remove duplicates.
  321. lowercase_sed='{
  322. h
  323. s/^[^@]*@\(.*\)$/\1/
  324. y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
  325. x
  326. s/^\([^@]*\)@.*/\1@/
  327. G
  328. s/\
  329. //
  330. p
  331. }'
  332. naddresses=""
  333. for addr in $addresses; do
  334.   case "$addr" in
  335.     "<"*">") addr=`echo "$addr" | sed -e 's/^<//' -e 's/>$//'` ;;
  336.   esac
  337.   case "$addr" in
  338.     *@*)
  339.       addr=`echo "$addr" | sed -n -e "$lowercase_sed"`
  340.       case " $naddresses " in
  341.         *" $addr "*) ;;
  342.         *) naddresses="$naddresses $addr" ;;
  343.       esac
  344.       ;;
  345.   esac
  346. done
  347. addresses="$naddresses"
  348.  
  349. # Now it's time to ask the user.
  350. case "$addresses" in
  351.   " "*" "*)
  352.     # At least two addresses.
  353.     lines=""
  354.     i=0
  355.     for addr in $addresses; do
  356.       i=`expr $i + 1`
  357.       lines="${lines}${i} ${addr}
  358. "
  359.     done
  360.     while true; do
  361.       { gettext "Which is your email address?"; echo; } 1>&3
  362.       echo "$lines" 1>&3
  363.       { gettext "Please choose the number, or enter your email address."; echo; } 1>&3
  364.       read answer < /dev/tty
  365.       case "$answer" in
  366.         *@*) ;;
  367.         [0-9]*)
  368.           i=0
  369.           for addr in $addresses; do
  370.             i=`expr $i + 1`
  371.             if test "$i" = "$answer"; then
  372.               break 2
  373.             fi
  374.           done
  375.           ;;
  376.       esac
  377.       case "$answer" in
  378.         "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
  379.       esac
  380.       case "$answer" in
  381.         *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
  382.         *@*.*) ;;
  383.         *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
  384.         *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
  385.       esac
  386.       addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
  387.       break
  388.     done
  389.     ;;
  390.   " "*)
  391.     # One address.
  392.     while true; do
  393.       { gettext "Is the following your email address?"; echo; } 1>&3
  394.       echo " $addresses" 1>&3
  395.       { gettext "Please confirm by pressing Return, or enter your email address."; echo; } 1>&3
  396.       read answer < /dev/tty
  397.       if test -z "$answer"; then
  398.         addr=`echo "$addresses" | sed -e 's/^ //'`
  399.         break
  400.       fi
  401.       case "$answer" in
  402.         "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
  403.       esac
  404.       case "$answer" in
  405.         *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
  406.         *@*.*) ;;
  407.         *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
  408.         *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
  409.       esac
  410.       addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
  411.       break
  412.     done
  413.     ;;
  414.   "")
  415.     # No address.
  416.     { gettext "Couldn't find out about your email address."; echo; } 1>&3
  417.     while true; do
  418.       { gettext "Please enter your email address."; echo; } 1>&3
  419.       read answer < /dev/tty
  420.       case "$answer" in
  421.         "<"*">") answer=`echo "$answer" | sed -e 's/^<//' -e 's/>$//'` ;;
  422.       esac
  423.       case "$answer" in
  424.         *" "*) { gettext "Invalid email address: invalid character."; echo; echo; } 1>&3 ; continue ;;
  425.         *@*.*) ;;
  426.         *@*) { gettext "Invalid email address: need a fully qualified host name or domain name."; echo; echo; } 1>&3 ; continue ;;
  427.         *) { gettext "Invalid email address: missing @"; echo; echo; } 1>&3 ; continue ;;
  428.       esac
  429.       addr=`echo "$answer" | sed -n -e "$lowercase_sed"`
  430.       break
  431.     done
  432.     ;;
  433.   *) echo "internal error" 1>&3 ; exit 1 ;;
  434. esac
  435.  
  436. # Print to standard output.
  437. echo "$addr"
  438.